package com.itcam.reflection_;

/**
 * Author:Cammy.Wu
 * Date:2024-05-13
 * Description:
 */

/**
 * 类加载的作用：将class文件字节码内容加载到内存中，并将这些静态数据
 * 转换成方法区的运行时数据结构，然后在堆中生成一个代表这个类的java.lang.Class对象，
 * 作为方法区中类数据的访问入口。
 * 类缓存：标准的JavaSE类加载器可以按要求查找类，但一旦某个类被加载到类加载器中，它将维持加载（缓冲）一段时间。
 * 不过JVM垃圾回收机制
 * <p>
 * 类装载器
 * |
 * 字节码校验器
 * |
 * 解释器
 */

public class ReflectionDemo06 {
    public static void main(String[] args) throws ClassNotFoundException {
        // 获取系统类的加载器
        ClassLoader systemClassLoader = ClassLoader.getSystemClassLoader();
        System.out.println("systemClassLoader = " + systemClassLoader);

        // 获取系统类加载器的父类加载器 ——> 扩展类加载器
        ClassLoader parent1 = systemClassLoader.getParent();
        System.out.println("parent1 = " + parent1);

        // 获取扩展类加载器的父类加载器 ——> 根加载器(C/C++）
        ClassLoader parent2 = parent1.getParent();
        System.out.println("parent2 = " + parent2);

        // 测试当前类是哪个加载器加载的
        ClassLoader classLoader = Class.forName("com.itcam.reflection_.ReflectionDemo06").getClassLoader();
        System.out.println(classLoader);

        // 测试JDK内置的类的谁加载的
        classLoader = Class.forName("java.lang.Object").getClassLoader();
        System.out.println("classLoader = " + classLoader);

        // 如何获得系统类加载器可以加载的路径
        System.out.println(System.getProperty("java.class.path"));

        /**
         * D:\ProgramData\Object_Oriented\withhsp-java-study\java_leak_filling\out\production\java_leak_filling;
         * D:\ProgramData\Object_Oriented\withhsp-java-study\java_leak_filling;
         * C:\Users\Cammy\.m2\repository\junit\junit\4.13.1\junit-4.13.1.jar;
         * C:\Users\Cammy\.m2\repository\org\hamcrest\hamcrest-core\1.3\hamcrest-core-1.3.jar
         */


    }

}
